import axios from "axios";
import router from "../router";
import el from "element-ui";
let http = axios.create({
  //baseURL: "/api", //基础地址
  timeout: 1000 * 10, //超时设置
  withCredentials: true, //是否携带凭证进行数据交换
});

//拦截的目的,就是为了给每个请求都添加相同的请求头
http.interceptors.request.use((config) => {
  //config就是拦截的每一个请求
  //除了登入和获取验证码以外,其它的请求都带上 authorization这个请求头,值是token
  // console.log(123)
  // console.log(config)

  let token = localStorage.getItem("qf-token");

  let pathList = ["/user/login", "/users/getCaptcha"]; //不需要加请求头的路径清单
  //some 表达的意思就是 遍历pathList 查看里面有没有一个路径是和请求的路径相同,只要包含一个或者以上,就返回true,否则返回false
  // let result = pathList.some(path => path === config.url)
  //config.url就是拦截到的请求地址
  let result = pathList.includes(config.url);
  // console.log(result)
  if (!result) {
    //
    config.headers.authorization = token;
  }

  //只要return config就相当于放行

  return config;
}); //拦截所有的请求

//拦截响应
//token校验失败的原因 token的周期(1min左右)

//1.token时间失效(身份过期了,打疫苗刷不了)

//2.token错误(身份证证消磁了,打不了疫苗);

//token校验失败,我们就要让页面跳转到登入页

http.interceptors.response.use((config) => {
  // console.log(config);

  //如果响应的数据中,code===1004或者10022的时候,表示登入过期了,或者token验证失败,那么就需要跳转到登入页,并且提示用户登入过期
  // console.log(el);
  if (config.data.code === "1004" || config.data.code === "10022") {
    //跳转到登入页
    router.push("/login");
    el.Message.error("登入信息过期,请重新登入");
    //清除token
    localStorage.removeItem("qf-token")
  }

  return config;
});

export default http;

